package com.homework.dao;

import com.homework.model.User;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * @desc:
 * @author: TongZhiPeng-057
 * @date: 2024/09/18
 */

@Repository
public class UserDao {
    @Autowired
    private Connection conn ;


        public int insert(User user) {
            // SQL 插入语句
            String sql = "INSERT INTO user (name, password, gender, salt, create_time) VALUES (?, ?, ?, ?, ?)";

            try (
                    PreparedStatement ps = conn.prepareStatement(sql)
            ) {
                // 设置 PreparedStatement 的参数
                ps.setString(1, user.getName());              // 对应 name
                ps.setString(2, user.getPassword());          // 对应 password
                ps.setInt(3, user.getGender());               // 对应 gender
                ps.setString(4, user.getSalt());              // 对应 salt
                ps.setDate(5,new Date(System.currentTimeMillis())); // 对应 create_time

                // 执行插入语句，返回插入结果 (受影响的行数)
                return ps.executeUpdate();
            } catch (Exception e) {
                // 异常处理
                e.printStackTrace();
            }

            return 0;
        }



    /**
     * todo: 实现登录
     * @param name
     * @param password
     * @return
     */
    public User login(String name, String password) {
        String sql = "SELECT * FROM User WHERE name = ?";  // 查询语句

        try (
                PreparedStatement ps = conn.prepareStatement(sql)
        ) {
            // 设置查询参数
            ps.setString(1, name);

            // 执行查询
            ResultSet rs = ps.executeQuery();

            // 如果查询结果存在
            if (rs.next()) {
                // 获取数据库中存储的明文密码
                String storedPassword = rs.getString("password");

                // 直接比较输入的密码是否与数据库中的密码相等
                if (storedPassword.equals(password)) {
                    // 如果匹配，构造 User 对象返回
                    User user = new User();
                    user.setUserId(rs.getInt("user_id"));
                    user.setName(rs.getString("name"));
                    user.setPassword(storedPassword);  // 可以选择是否存储密码在对象中
                    user.setGender(rs.getInt("gender"));
                    user.setSalt(rs.getString("salt"));
                    user.setCreateTime(rs.getTimestamp("create_time"));

                    return user;  // 登录成功，返回 User 对象
                }
            }

        } catch (Exception e) {
            e.printStackTrace();  // 异常处理
        }

        return null;  // 登录失败，返回 null
    }

    /**
     * todo: 统计所有的用户数
     * @return
     */
    public int countAllUsers() {
        String sql = "SELECT COUNT(*) FROM User";  // 统计用户数量的 SQL 查询
        int userCount = 0;

        try (
                PreparedStatement ps = conn.prepareStatement(sql);
                ResultSet rs = ps.executeQuery()
        ) {
            if (rs.next()) {
                userCount = rs.getInt(1);  // 获取查询结果中的第一个列（用户数量）
            }
        } catch (Exception e) {
            e.printStackTrace();  // 异常处理
        }

        return userCount;
    }

}
